#include <iostream>
#include <array>
using namespace std;

//template<class T,size_t N>
//class Stack
//{
//private:
//	T _a[N];
//	int _top;
//};
//
//int main()
//{
//	Stack<int, 20> st1;
//	Stack<int, 10> st1;
//	return 0;
//}
//int main()
//{
//	array<int, 10> a1;
//	cout << sizeof(a1) << endl;
//	return 0;
//}

//class Date
//{
//public:
//	Date(int y, int m, int d) :_y(y), _m(m), _d(d) {}
//	void print()
//	{
//		cout << _y << ' ' << _m << ' ' << _d << endl;
//	}
//	bool operator<(const Date& s)
//	{
//		if (_y < s._y)
//		{
//			return 1;
//		}
//		return 0;
//	}
//private:
//	int _y;
//	int _m;
//	int _d;
//};
//
//
//template<class T>
//bool Less(T left, T right)
//{
//	return left < right;
//}
//
//template<>
//bool Less<Date*>(Date* left, Date* right)
//{
//	return *left < *right;
//}
//
//int main()
//{
//	//bool ret = less<int>(1, 2);
//	Date d2(2023, 1, 1);
//	Date d1(2022, 1, 1);
//
//	Date* d4 = new Date(2024,1,1);
//	Date* d3 = new Date(2023, 1, 1);
//
//	cout << Less(d1, d2) << endl;
//	cout << Less(d3, d4) << endl;
//	return 0;
//}


template<class T1,class T2>
class Date
{
public:
	Date() { cout << "Date<T1,T2>" << endl; }
private:
	T1 _d1;
	T2 _d2;
};

template<>
class Date<int,char>
{
public:
	Date() { cout << "Date<int,char>" << endl; }
private:
	int _d1;
	char _d2;
};

template<class T1>
class Date<T1, char>
{
public:
	Date() { cout << "Date<T1, char>" << endl; }
private:
	T1 _d1;
	char _d2;
};


template<class T1, class T2>
class Date<T1*,T2*>
{
public:
	Date() { cout << "Date<T1,T2>" << endl; }
private:
	T1 _d1;
	T2 _d2;
};


int main()
{
	Date<int, int>d1;
	Date<int, char>d2;
	Date<double, char>d3;
	return 0;
}

